package com.ai.service.cms.user;

import java.util.List;
import java.util.Map;

import com.ai.common.model.Pagination;
import com.ai.common.model.Result;
import com.ai.model.edu.cms.backoperator.BackendOperator;
import com.ai.model.edu.cms.backoperator.Role;
import com.ai.model.edu.cms.backoperator.dto.BackendOperatorDTO;
import com.ai.model.edu.cms.backoperator.dto.OperatorRoleDTO;
import com.ai.model.edu.cms.backoperator.dto.RoleDTO;
import com.ai.model.edu.cms.backoperator.vo.BackendOperatorVO;
import com.ai.model.edu.cms.backoperator.vo.MenuVO;

public interface BackendOperatorService {
    /**
     * Description ： 根据用户名查找用户
     * 
     * nyj
     * 
     * @param userName
     * @return
     * @since
     *
     */
    public BackendOperatorVO findBackendOperatorByName(String userName);

    /**
     * Description ： 根据dto(用户名)查询用户信息<br>
     * 
     * yangwb
     * 
     * @param backendOperatorDTO
     * @return
     * @since
     *
     */
    public BackendOperatorVO findBackendOperatorByDTO(BackendOperatorDTO backendOperatorDTO);

    /**
     * Description ： 登录验证
     * 
     * nyj
     * 
     * @param backendOperatorDTO
     * @return
     * @since
     *
     */
    public BackendOperatorVO login(BackendOperatorDTO backendOperatorDTO);

    /**
     * Description ： 根据DTO查询用户分页信息<br>
     * 
     * yangwb
     * 
     * @param backendOperatorDTO
     * @return
     * @since
     * 
     */
    public Pagination<BackendOperatorVO> findBackendVOSPgByDTO(BackendOperatorDTO backendOperatorDTO);

    /**
     * Description ： 新增or编辑用户信息<br>
     * 
     * yangwb
     * 
     * @param backendOperator
     * @return
     * @since
     *
     */
    public Result addOrUpdateBackendOperator(BackendOperator backendOperator);

    /**
     * Description ： 根据dto更新用户（开启冻结状态）状态<br>
     * 
     * yangwb
     * 
     * @param backendOperatorDTO
     * @return
     * @since
     * 
     */
    public int updateBackendUserStatusByDTO(BackendOperatorDTO backendOperatorDTO);

    /**
     * Description ： 根据dto删除用户<br>
     * 
     * yangwb
     * 
     * @param backendOperatorDTO
     * @return
     * @since
     * 
     */
    public int deleteBackOperatorByDTO(BackendOperatorDTO backendOperatorDTO);

    /**
     * Description ： 批量新增用户角色关系<br>
     * 
     * yangwb
     * 
     * @param backendOperatorDTO
     * @since
     * 
     */
    public void addBackOperatorRoleByDTO(BackendOperatorDTO backendOperatorDTO);

    /**
     * Description ： 批量新增和删除用户角色关系<br>
     * 
     * yangwb
     * 
     * @param backendOperatorDTO
     * @since
     * 
     */
    public void addAndDelBackOperatorRole(Long operatorId, Long backOperatorId, String addRoleIds, String delRoleIds);

    /**
     * Description ： 根据用户id查询该用户下的权限信息 <br>
     * 
     * yangwb
     * 
     * @param id
     * @return map key:functionCode value:MenuVO
     * @since
     * 
     */
    public Map<String, MenuVO> findMenuVOSById(Long id);

    /**
     * Description ： 根据id 查询该用户下的所有菜单<br>
     * 
     * yangwb
     * 
     * @param id
     * @return
     * @since
     *
     */
    public List<MenuVO> findMenuVOS(Long id);
    
    /**
     * Description ： 用户自己修改信息<br>
     * 
     * zhangdh
     * 
     * @param backendOperatorDTO
     * @param BackendOperatorVO
     * @return
     * @since
     *
     */
    public int updateMyBackendOperator(BackendOperatorDTO backendOperatorDTO,BackendOperatorVO operatorVO);
    
    /**
     * Description ： 根据主键id查询用户对象<br>
     * 
     * yangwb
     * 
     * @param id
     * @return
     * @since
     * 
     */
    public BackendOperatorVO findBackendOperatorVOById(Long id);

    /**
     * Description ： 新增角色信息
     * 
     * nyj
     * 
     * @since
     *
     */
    public void addRoleInfo(Role role);

    /**
     * Description ：启用角色
     * 
     * nyj
     * 
     * @param roleDTO
     * @return
     * @since
     *
     */
    public int enableRole(RoleDTO roleDTO);

    /**
     * Description ：冻结角色
     * 
     * nyj
     * 
     * @param roleDTO
     * @return
     * @since
     *
     */
    public int unableRole(RoleDTO roleDTO);

    /**
     * Description ： 批量新增用户
     * 
     * nyj
     * 
     * @param role
     * @since
     *
     */
    public void addRole2User(OperatorRoleDTO operatorRoleDTO);

    /**
     * Description ： 根据ID删除角色
     * 
     * nyj
     * 
     * @param roleDTO
     * @return
     * @since
     *
     */
    public int deleteRoleById(RoleDTO roleDTO);

    /**
     * Description	： 根据创建人姓名模糊查询数据<br>
     * 
     * wumc
     * @param term
     * @return
     * @since
     *
     */
    public List<BackendOperatorVO> findOperatorListByName(String term);
}
